home *** CD-ROM | disk | FTP | other *** search
/ Kompuutteri Kaikille K-CD 2002 #1 / K-CD_2002-01.iso / Delphi / INSTALL / program files / Borland / Delphi6 / Doc / VCLEditors.int < prev   
Text File  |  2001-05-22  |  13KB  |  345 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {                                                       }
  6. {       Copyright (c) 1995, 2001 Borland Software Corp. }
  7. {                                                       }
  8. {       Windows specific property editors               }
  9. {                                                       }
  10. {*******************************************************}
  11.  
  12. unit VCLEditors;
  13.  
  14. interface
  15.  
  16. uses
  17.   Messages, Types, Classes, Graphics, Menus, Controls, Forms, StdCtrls,
  18.   DesignIntf, DesignEditors, DesignMenus, ActnList;
  19.  
  20. { Property Editors }
  21.  
  22. type
  23. { ICustomPropertyDrawing
  24.   Implementing this interface allows a property editor to take over the object
  25.   inspector's drawing of the name and the value. If paFullWidthName is returned
  26.   by IProperty.GetAttributes then only PropDrawName will be called. Default
  27.   implementation of both these methods are provided in DefaultPropDrawName
  28.   and DefaultPropDrawValue in this unit. }
  29.   ICustomPropertyDrawing = interface
  30.     ['{E1A50419-1288-4B26-9EFA-6608A35F0824}']
  31.     procedure PropDrawName(ACanvas: TCanvas; const ARect: TRect;
  32.       ASelected: Boolean);
  33.     procedure PropDrawValue(ACanvas: TCanvas; const ARect: TRect;
  34.       ASelected: Boolean);
  35.   end;
  36.  
  37. { ICustomPropertyDrawing
  38.   Implemention this interface allows a property editor to take over the drawing
  39.   of the drop down list box displayed by the property editor. This is only
  40.   meaningful to implement if the property editor returns paValueList from
  41.   IProperty.GetAttributes. The Value parameter is the result of
  42.   IProperty.GetValue. The implementations ListMeasureWidth and ListMeasureHeight
  43.   can be left blank since the var parameter is filled in to reasonable defaults
  44.   by the object inspector. A default implementation of ListDrawValue is supplied
  45.   in the DefaultPropertyListDrawValue procedure included in this unit }
  46.   ICustomPropertyListDrawing = interface
  47.     ['{BE2B8CF7-DDCA-4D4B-BE26-2396B969F8E0}']
  48.     procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
  49.       var AWidth: Integer);
  50.     procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
  51.       var AHeight: Integer);
  52.     procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
  53.       const ARect: TRect; ASelected: Boolean);
  54.   end;
  55.  
  56.  
  57. { TFontNameProperty
  58.   Editor for the TFont.FontName property.  Displays a drop-down list of all
  59.   the fonts known by Windows.  The following global variable will make
  60.   this property editor actually show examples of each of the fonts in the
  61.   drop down list.  We would have enabled this by default but it takes
  62.   too many cycles on slower machines or those with a lot of fonts.  Enable
  63.   it at your own risk. ;-}
  64. var
  65.   FontNamePropertyDisplayFontNames: Boolean = False;
  66.  
  67. type
  68.   TFontNameProperty = class(TStringProperty, ICustomPropertyListDrawing)
  69.   public
  70.     function GetAttributes: TPropertyAttributes; override;
  71.     procedure GetValues(Proc: TGetStrProc); override;
  72.  
  73.     // ICustomPropertyListDrawing
  74.     procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
  75.       var AHeight: Integer);
  76.     procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
  77.       var AWidth: Integer);
  78.     procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
  79.       const ARect: TRect; ASelected: Boolean);
  80.   end;
  81.  
  82. { TFontCharsetProperty
  83.   Editor for the TFont.Charset property.  Displays a drop-down list of the
  84.   character-set by Windows.}
  85.  
  86.   TFontCharsetProperty = class(TIntegerProperty)
  87.   public
  88.     function GetAttributes: TPropertyAttributes; override;
  89.     function GetValue: string; override;
  90.     procedure GetValues(Proc: TGetStrProc); override;
  91.     procedure SetValue(const Value: string); override;
  92.   end;
  93.  
  94. { TImeNameProperty
  95.   Editor for the TImeName property.  Displays a drop-down list of all
  96.   the IME names known by Windows.}
  97.  
  98.   TImeNameProperty = class(TStringProperty)
  99.   public
  100.     function GetAttributes: TPropertyAttributes; override;
  101.     procedure GetValues(Proc: TGetStrProc); override;
  102.   end;
  103.  
  104. { TColorProperty
  105.   Property editor for the TColor type.  Displays the color as a clXXX value
  106.   if one exists, otherwise displays the value as hex.  Also allows the
  107.   clXXX value to be picked from a list. }
  108.  
  109.   TColorProperty = class(TIntegerProperty, ICustomPropertyDrawing,
  110.     ICustomPropertyListDrawing)
  111.   public
  112.     procedure Edit; override;
  113.     function GetAttributes: TPropertyAttributes; override;
  114.     function GetValue: string; override;
  115.     procedure GetValues(Proc: TGetStrProc); override;
  116.     procedure SetValue(const Value: string); override;
  117.  
  118.     { ICustomPropertyListDrawing }
  119.     procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
  120.       var AHeight: Integer);
  121.     procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
  122.       var AWidth: Integer);
  123.     procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
  124.       const ARect: TRect; ASelected: Boolean);
  125.  
  126.     { CustomPropertyDrawing }
  127.     procedure PropDrawName(ACanvas: TCanvas; const ARect: TRect;
  128.       ASelected: Boolean);
  129.     procedure PropDrawValue(ACanvas: TCanvas; const ARect: TRect;
  130.       ASelected: Boolean); 
  131.   end;
  132.  
  133. { TBrushStyleProperty
  134.   Property editor for TBrush's Style.  Simply provides for custom render. }
  135.  
  136.   TBrushStyleProperty = class(TEnumProperty, ICustomPropertyDrawing,
  137.     ICustomPropertyListDrawing)
  138.   public
  139.     { ICustomPropertyListDrawing }
  140.     procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
  141.       var AHeight: Integer);
  142.     procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
  143.       var AWidth: Integer);
  144.     procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
  145.       const ARect: TRect; ASelected: Boolean);
  146.  
  147.     { ICustomPropertyDrawing }
  148.     procedure PropDrawName(ACanvas: TCanvas; const ARect: TRect;
  149.       ASelected: Boolean);
  150.     procedure PropDrawValue(ACanvas: TCanvas; const ARect: TRect;
  151.       ASelected: Boolean);
  152.   end;
  153.  
  154. { TPenStyleProperty
  155.   Property editor for TPen's Style.  Simply provides for custom render. }
  156.  
  157.   TPenStyleProperty = class(TEnumProperty, ICustomPropertyDrawing,
  158.     ICustomPropertyListDrawing)
  159.   public
  160.     { ICustomPropertyListDrawing }
  161.     procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
  162.       var AHeight: Integer);
  163.     procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
  164.       var AWidth: Integer);
  165.     procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
  166.       const ARect: TRect; ASelected: Boolean);
  167.  
  168.     { ICustomPropertyDrawing }
  169.     procedure PropDrawName(ACanvas: TCanvas; const ARect: TRect;
  170.       ASelected: Boolean);
  171.     procedure PropDrawValue(ACanvas: TCanvas; const ARect: TRect;
  172.       ASelected: Boolean);
  173.   end;
  174.  
  175. { TCursorProperty
  176.   Property editor for the TCursor type.  Displays the cursor as a clXXX value
  177.   if one exists, otherwise displays the value as hex.  Also allows the
  178.   clXXX value to be picked from a list. }
  179.  
  180.   TCursorProperty = class(TIntegerProperty, ICustomPropertyListDrawing)
  181.   public
  182.     function GetAttributes: TPropertyAttributes; override;
  183.     function GetValue: string; override;
  184.     procedure GetValues(Proc: TGetStrProc); override;
  185.     procedure SetValue(const Value: string); override;
  186.  
  187.     { ICustomPropertyListDrawing }
  188.     procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
  189.       var AHeight: Integer);
  190.     procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
  191.       var AWidth: Integer);
  192.     procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
  193.       const ARect: TRect; ASelected: Boolean); 
  194.   end;
  195.  
  196. { TFontProperty
  197.   Property editor for the Font property.  Brings up the font dialog as well as
  198.   allowing the properties of the object to be edited. }
  199.  
  200.   TFontProperty = class(TClassProperty)
  201.   public
  202.     procedure Edit; override;
  203.     function GetAttributes: TPropertyAttributes; override;
  204.   end;
  205.  
  206. { TModalResultProperty }
  207.  
  208.   TModalResultProperty = class(TIntegerProperty)
  209.   public
  210.     function GetAttributes: TPropertyAttributes; override;
  211.     function GetValue: string; override;
  212.     procedure GetValues(Proc: TGetStrProc); override;
  213.     procedure SetValue(const Value: string); override;
  214.   end;
  215.  
  216. { TShortCutProperty
  217.   Property editor the ShortCut property.  Allows both typing in a short
  218.   cut value or picking a short-cut value from a list. }
  219.  
  220.   TShortCutProperty = class(TOrdinalProperty)
  221.   public
  222.     function GetAttributes: TPropertyAttributes; override;
  223.     function GetValue: string; override;
  224.     procedure GetValues(Proc: TGetStrProc); override;
  225.     procedure SetValue(const Value: string); override;
  226.   end;
  227.  
  228. { TMPFilenameProperty
  229.   Property editor for the TMediaPlayer.  Displays an File Open Dialog
  230.   for the name of the media file.}
  231.  
  232.   TMPFilenameProperty = class(TStringProperty)
  233.   public
  234.     procedure Edit; override;
  235.     function GetAttributes: TPropertyAttributes; override;
  236.   end;
  237.  
  238. { TTabOrderProperty
  239.   Property editor for the TabOrder property.  Prevents the property from being
  240.   displayed when more than one component is selected. }
  241.  
  242.   TTabOrderProperty = class(TIntegerProperty)
  243.   public
  244.     function GetAttributes: TPropertyAttributes; override;
  245.   end;
  246.  
  247. { TCaptionProperty
  248.   Property editor for the Caption and Text properties.  Updates the value of
  249.   the property for each change instead on when the property is approved. }
  250.  
  251.   TCaptionProperty = class(TStringProperty)
  252.   public
  253.     function GetAttributes: TPropertyAttributes; override;
  254.   end;
  255.  
  256. function GetDisplayValue(const Prop: IProperty): string;
  257. procedure DefaultPropertyDrawName(Prop: TPropertyEditor; Canvas: TCanvas;
  258.   const Rect: TRect);
  259. procedure DefaultPropertyDrawValue(Prop: TPropertyEditor; Canvas: TCanvas;
  260.   const Rect: TRect);
  261. procedure DefaultPropertyListDrawValue(const Value: string; Canvas: TCanvas;
  262.   const Rect: TRect; Selected: Boolean);
  263.  
  264. type
  265. { ISelectionMessage }
  266.  
  267. { If a selection editor implements this interface the form designer will ensure
  268.   all windows message are first sent through this interface before handling
  269.   them when the selection editor for the corresponding class is selected.
  270.  
  271.   IsSelectionMessage - Filter for all messages processed by the designer when
  272.     this the implementing selection editor is active. Return True if the message
  273.     is handled by the selection editor which causes the designer to ignore
  274.     the message (as well as preventing the control from seeing the message)
  275.     or False, allowing the designer to process the message normally.
  276.       Sender   the control that received the original message.
  277.       Message  the message sent by windows to the control. }
  278.   ISelectionMessage = interface
  279.     ['{58274878-BB87-406A-9220-904105C9E112}']
  280.     function IsSelectionMessage(Sender: TControl;
  281.       var Message: TMessage): Boolean;
  282.   end;
  283.  
  284.   ISelectionMessageList = interface
  285.     ['{C1360368-0099-4A7C-A4A8-7650503BA0C6}']
  286.     function Get(Index: Integer): ISelectionMessage;
  287.     function GetCount: Integer;
  288.     property Count: Integer;
  289.     property Items[Index: Integer]: ISelectionMessage; default;
  290.   end;
  291.  
  292. function SelectionMessageListOf(const SelectionEditorList: ISelectionEditorList): ISelectionMessageList;
  293.  
  294. { Custom Module Types }
  295.  
  296. type
  297.  
  298. { ICustomDesignForm
  299.   Allows a custom module to create a different form for use by the designer
  300.   as the base form.
  301.  
  302.     CreateDesignForm - Create a descendent of TCustomForm for use by the
  303.       designer as the instance to design }
  304.   ICustomDesignForm = interface
  305.     ['{787195AF-C234-49DC-881B-221B69C0137A}']
  306.     procedure CreateDesignerForm(const Designer: IDesigner; Root: TComponent;
  307.       out DesignForm: TCustomForm; out ComponentContainer: TWinControl);
  308.   end;
  309.  
  310. { Clipboard utility functions }
  311.  
  312. var
  313.   CF_COMPONENTS: Word;
  314.  
  315. procedure CopyStreamToClipboard(S: TMemoryStream);
  316. function GetClipboardStream: TMemoryStream;
  317.  
  318. { EditAction utility functions }
  319.  
  320. function EditActionFor(AEditControl: TCustomEdit; Action: TEditAction): Boolean;
  321. function GetEditStateFor(AEditControl: TCustomEdit): TEditState;
  322.  
  323. { Registry Information }
  324.  
  325. var
  326.   BaseRegistryKey: string = '';
  327.  
  328. { Action Registration }
  329.  
  330. type
  331.  
  332.   TNotifyActionListChange = procedure;
  333.  
  334. var
  335.  
  336.   NotifyActionListChange: TNotifyActionListChange = nil;
  337.  
  338. procedure RegActions(const ACategory: string;
  339.   const AClasses: array of TBasicActionClass; AResource: TComponentClass);
  340. procedure UnRegActions(const Classes: array of TBasicActionClass);
  341. procedure EnumActions(Proc: TEnumActionProc; Info: Pointer);
  342. function CreateAction(AOwner: TComponent; ActionClass: TBasicActionClass): TBasicAction;
  343.  
  344. implementation
  345.